from typing import List

import argparse
from celery.app.base import Celery
from celery.schedules import crontab


class InputDataFromUser:
    """ Входные данные от пользователя """

    def get_base_object_for_arguments(self) -> argparse.ArgumentParser:
        """ Получаем базовый объект для аргументов """

        parser = argparse.ArgumentParser()
        parser.add_argument(
            '-pf',
            '--parsing-frequency',
            type=str,
            choices=['daytime'],
            default='daytime',
            help='Частота парсинга'
        )
        parser.add_argument(
            '-wp',
            '--what-parse',
            type=str,
            choices=['all_products', 'specified_products'],
            default='specified_products',
            help='Что будем парсить?'
        )
        return parser


    def get_list_of_passed_arguments(self) -> argparse.Namespace:
        """ Получаем список из переданных аргументов """

        base_object_for_arguments = self.get_base_object_for_arguments()
        return base_object_for_arguments.parse_args()


def run_necessary_task(app: Celery) -> None:
    """ Запускаем необходимые задачи """

    list_of_passed_arguments = InputDataFromUser().get_list_of_passed_arguments()

    match list_of_passed_arguments.what_parse:
        case 'specified_products':
            app.conf.beat_schedule = {
                'parsing-specified-products': {
                    'task': 'celery_app.parse_specified_products',
                    'schedule': crontab(minute=59, hour='5,22'),
                },
                'sending_data_statistics': {
                    'task': 'celery_app.send_statistics_of_specified_products',
                    'schedule': crontab(minute=15, hour='6,20'),
                },
            }
        case 'all_products':
            app.conf.beat_schedule = {
                'parsing_all_products': {
                    'task': 'celery_app.parsing_all_products',
                    'schedule': crontab(minute=42, hour='12,14'),
                },
                'sending_data_statistics': {
                    'task': 'celery_app.send_statistics',
                    'schedule': crontab(minute=0, hour=5),
                },
            }


def get_list_of_links_of_prouducts_to_parsed() -> List[str]:
    """ Получаем список ссылок продуктов для парсинга """

    with open('list_of_products_for_parsing.txt') as file:
        return [line.strip() for line in file]
